import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 * Deze klasse geeft een grafische schil (User interface) weer
 * 
 * @author Wim Barelds & Sander Wagenaar
 * @version 12-01-2012
 */
public class GUI implements ActionListener
{
    private JFrame frame;
    private Container split;
    private Container container;
    
    private JTextArea outputField;
    
    private JTextField MinArtikelenPerSoort;
    private JTextField MaxArtikelenPerSoort;
    private JTextField MinArtikelenPerPersoon;
    private JTextField MaxArtikelenPerPersoon;
    private JTextField MinPersonenPerDag;
    private JTextField MaxPersonenPerDag;
    private JTextField numDagenText;
    
    private JTextField artikelNaam;
    private JTextField artikelPrijs;
    
    private KantineSimulatie kantineSimulatie;
    
    /**
     * Constructor for objects of class View
     */
    public GUI()
    {
        kantineSimulatie = new KantineSimulatie();
        kantineSimulatie.setGUI(this);
        
        // Create frame
        frame = new JFrame("Kantine Simulatie");
        Container contentPane = frame.getContentPane();
        
        Container configLayout = new Container();
        configLayout.setLayout(new GridLayout(0, 2));
        
        MinArtikelenPerSoort = new JTextField("10000");
        MaxArtikelenPerSoort = new JTextField("20000");
        MinArtikelenPerPersoon = new JTextField("1");
        MaxArtikelenPerPersoon = new JTextField("4");
        MinPersonenPerDag = new JTextField("50");
        MaxPersonenPerDag = new JTextField("100");
        
        configLayout.add(new JLabel("Minimaal aantal artikelen per soort:"));
        configLayout.add(MinArtikelenPerSoort);
        configLayout.add(new JLabel("Maximaal aantal artikelen per soort:"));
        configLayout.add(MaxArtikelenPerSoort);
        configLayout.add(new JLabel("Minimaal aantal artikelen per klant:"));
        configLayout.add(MinArtikelenPerPersoon);
        configLayout.add(new JLabel("Maximaal aantal artikelen per klant:"));
        configLayout.add(MaxArtikelenPerPersoon);
        configLayout.add(new JLabel("Minimaal aantal klanten per dag:"));
        configLayout.add(MinPersonenPerDag);
        configLayout.add(new JLabel("Maximaal aantal klanten per dag:"));
        configLayout.add(MaxPersonenPerDag);
        
        Container simulateLayout = new Container();
        simulateLayout.setLayout(new BorderLayout());
        
        numDagenText = new JTextField("10");
        JButton startButton = new JButton("Begin Simulatie");
        startButton.addActionListener(this);
        outputField = new JTextArea(12, 0);
        JScrollPane scrollingTextArea = new JScrollPane(outputField);
        
        Container simulateLayoutInput = new Container();
        simulateLayoutInput.setLayout(new GridLayout(0, 2));
        simulateLayoutInput.add(new JLabel("Aantal dagen:"));
        simulateLayoutInput.add(numDagenText);
        
        simulateLayout.add(simulateLayoutInput, BorderLayout.NORTH);
        simulateLayout.add(scrollingTextArea, BorderLayout.CENTER);
        simulateLayout.add(startButton, BorderLayout.SOUTH);
        
        Container artikelenLayout = new Container();
        Container formGrid = new Container();
        artikelenLayout.setLayout(new BorderLayout());
        formGrid.setLayout(new GridLayout(0, 2));
        
        artikelNaam = new JTextField("");
        artikelPrijs = new JTextField("");
        
        formGrid.add(new JLabel("Product naam:"));
        formGrid.add(artikelNaam);
        formGrid.add(new JLabel("Product prijs:"));
        formGrid.add(artikelPrijs);
        
        JButton productToevoegen = new JButton("Product toevoegen");
        artikelenLayout.add(formGrid, BorderLayout.NORTH);
        
        artikelenLayout.add(productToevoegen, BorderLayout.CENTER);
        productToevoegen.addActionListener(this);
        
        JTabbedPane tabbedArea = new JTabbedPane();
        tabbedArea.add("Artikelen toevoegen", artikelenLayout);
        tabbedArea.add("Configuratie", configLayout);
        tabbedArea.add("Simulatie", simulateLayout);
        contentPane.add(tabbedArea);
        
        frame.pack();
        frame.setVisible(true);
    }
    
    public void actionPerformed(ActionEvent e)
    {
        String actionCommand = e.getActionCommand();
        if(actionCommand.equals("Begin Simulatie")) {
            kantineSimulatie.configureer(
                Integer.parseInt(MinArtikelenPerSoort.getText()),
                Integer.parseInt(MaxArtikelenPerSoort.getText()),
                Integer.parseInt(MinArtikelenPerPersoon.getText()),
                Integer.parseInt(MaxArtikelenPerPersoon.getText()),
                Integer.parseInt(MinPersonenPerDag.getText()),
                Integer.parseInt(MaxPersonenPerDag.getText())
            );
            kantineSimulatie.simuleer(Integer.parseInt(this.numDagenText.getText()));
        }
        else {
            String artikelNaam = this.artikelNaam.getText();
            Double artikelPrijs = Double.parseDouble("0" + this.artikelPrijs.getText());
            
            if(artikelNaam == null || artikelNaam.equals("") || artikelPrijs == 0.0) {
                System.out.println("U heeft geen productnaam of prijs ingevuld.");
            }
            else {
                kantineSimulatie.artikelToevoegen(artikelNaam, artikelPrijs);
                this.artikelNaam.setText("");
                this.artikelPrijs.setText("");
            }
        }
    }
    
    public void print(String message)
    {
        outputField.append(message);
    }
}
